Repository navigation
docs(api): daily audit 2026-10-16 — RUM issue resolve mode, chat-bound Automation rules - #1061
Closed
flashduty[bot] wants to merge 1 commit into
Closed
flashduty[bot] wants to merge 1 commit into
flashduty[bot] wants to merge 1 commit into
Conversation
…d Automation rules Fixes two source-backed drifts that landed after the docs baseline (flashduty-docs main 23d063b): - fc-rum e60de00 (PR #294): issueUpdateInput.resolve_mode and IssueItem.resolve_mode; POST /rum/issue/update, /rum/issue/info, /rum/issue/list. - fc-safari 3206cd7e (PR #1551, bringing 34a3654c): CreateRuleRequest run_in + nullable team_id, AutomationRuleItem execution_place / execution_location, new AutomationExecutionLocation schema; POST /safari/automation/rule/{create,get,list,update}. Insert-only edits (HEAD key order preserved in all six files), no operation added or removed, so docs.json and api-catalog.mdx are untouched. 512 insertions / 12 deletions.
Contributor
|
Superseded by #1070, which re-applies the still-relevant parts of this PR on current main (see the table there for what was ported and what was left out). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Daily audit of the public OpenAPI surface (
--mode generate --scope all --auto) plus the minimal-diff repair of two source-backed drifts that landed after the docs baseline.flashduty-docsmain@23d063b1(2026-10-15T22:34:12+08:00 / 14:34Z).origin/mainof fc-pgy, fc-event, fc-oncall, fc-rum, fc-statuspage, monit-webapi, fc-datasource, go-pkg, fc-safari, monit-edge, fetched fresh).Auth == "all"and a path that does not start with/event/push/= 371 rows; the five split specs hold 370 operations. The single difference is the already-knownPOST /channel/incident/daily-counts(see Unresolved). No operation was added or removed, sodocs.jsonand bothapi-catalog.mdxfiles were deliberately not touched.Changes
rum/rum/issue/update,/rum/issue/info,/rum/issue/listsafari/safari/automation/rule/create,/rule/get,/rule/list,/rule/update1. RUM issue resolve mode (
fc-rum, PR #294 merged ase60de00, 2026-10-16T12:00+08:00)Go evidence on
origin/main:cmd/server/controller/issue/update.go—issueUpdateInputgainedResolveMode string json:"resolve_mode" binding:"omitempty,oneof=any version", applied only whilestatus == resolved; when omitted there the stored mode becomesany(types.ResolveModeAny).types/issue.go—IssueItemgainedResolveMode string json:"resolve_mode"betweenresolved_byandcreated_at.logic/issue/regression.go#reopensOnRecurrencetreatsanyas "reopen on any recurrence" and everything else — including the empty value written by inserts before the mode shipped (logic/issue/issue.go: a struct insert writes''over the column default) — as "reopen only on an unseen version".Emitted:
RumIssueUpdateRequest.properties.resolve_mode—string,enum [any, version], optional.RumIssueItem.properties.resolve_mode—string,enum ["", any, version](the empty enum member documents the legacy rows, matching the existingenvironment_kindconvention in the same files)./rum/issue/infoand/rum/issue/list, and the request example of/rum/issue/updatenow carry the field.2. Chat-bound Automation rules (
fc-safari, PR #1551 merged as3206cd7e, 2026-10-16T12:44+08:00)Go evidence on
origin/main(3206cd7eis what brought commit34a3654c, 2026-10-14, ontomain— it is not an ancestor of3206cd7e^1):cmd/api/automation/automation.go#CreateRuleRequest—TeamID int64became*int64("omitted means inherit the source conversation scope, while an explicit zero asks for personal scope"), and a newRunIn *string json:"run_in" binding:"omitempty,oneof=current-chat web"was added.types/automation.go#AutomationRuleItem— gainedExecutionPlace string json:"execution_place"(noomitempty) andExecutionLocation *AutomationExecutionLocation json:"execution_location,omitempty";logic/transfer.goalways fills both (config.ExecutionPlace(),config.PublicLocation(row.RunScope, row.TeamID)).types/automation_execution.go— newAutomationExecutionLocationtype.Emitted:
AutomationRuleCreateRequest.properties.team_id—["integer","null"](wasinteger) and a corrected description; the previous text ("0 or omitted means a personal rule") is no longer true.AutomationRuleCreateRequest.properties.run_in—["string","null"],enum [current-chat, web].AutomationRuleItem.properties.execution_place—string,enum [im, web_console], added to the item'srequired(Go has noomitempty).AutomationRuleItem.properties.execution_location—$ref: AutomationExecutionLocation.components.schemas.AutomationExecutionLocation—place,run_scope,team_id,platform,conversation_mode,chat_name,description;required: [place, run_scope, team_id, description](the four fields withoutomitempty). No enum is invented forplatform/conversation_mode— the source declares no closed value set for them.run_in/execution_place/execution_location.Diff discipline (iron rule 1)
git show HEAD:<path>; the worktree was never used as an input.HEADkey-path sequence is a subsequence of the new one in all six files (no reordering, no cosmetic churn). The consolidated files and the RUM split keep their alphabetical convention; the Safari split keeps its type-first convention.git diff --stat: 6 files, 512 insertions / 12 deletions. The 12 deletions are the oldteam_idtype: "integer"line (replaced by the two-member array) and the oldteam_iddescription line, in the four files that carry the create request.python3 -c "import json; json.load(open(path))"; 0 dangling$ref; 0 structural EN/ZH differences (comparison with human-facing text stripped) across all five modules; 0 integer epoch-looking fields missingUnix/epoch/timestampwording; 0*_msinteger fields missingmilliwording.Navigation and catalog
docs.jsonanden|zh/openapi/api-catalog.mdxwere not modified: the path sets of all six spec files are byte-identical toHEAD(370 → 370, rum 41 → 41, safari 53 → 53). The skill's reachability check printsnonefor both modules in the nav and in both catalogs, i.e. the pre-existing coverage is unaffected.mint broken-linkscould not be run —mintis not installed in this environment. The change only edits existing operations, so no new link is introduced.Unresolved
POST /channel/incident/daily-counts(channel:read:incidentDailyCounts,Auth: all) is in the fc-pgy registry but has no handler onfc-eventorigin/main—cmd/server/routes.go:146andlogic/incident/daily_counts.goexist only onorigin/dev. Per the skill it is not written into any spec; the row belongs to whoever decides to ship the handler or change the row'sAuth. This is the only registry-vs-docs difference and it is unchanged from the previous rounds.Recorded, not fixed this round
These are pre-existing docs-vs-Go gaps or committed internal inconsistencies, all outside the audit window; each would need its own decision (and, for the last two, a new schema), so they are not folded into this windowed diff.
safariautomation schemas are missing a family of fields that already exist onfc-safariorigin/mainand are described inen|zh/ai-sre/automations.mdx:AutomationRuleCreateRequest/AutomationRuleUpdateRequest:oncall_incident_merge_similar,war_room_trigger_enabled,war_room_channel_ids,war_room_severities.AutomationRuleItem: the same four pluswar_room_trigger_idandlast_run(would need a newAutomationRuleLastRunschema).AutomationRunItem:execution_place,joined_session_id,joined_session_name.POST /channel/escalate/rule/reorderchanged its input onfc-eventorigin/main(ec2b38e4e:new_priorities/priority/rule_id→drag_rule_id/target_rule_id) but that row isAuth: jwtin the registry, so it is not public surface and is not documented here.fc-eventPR #3156 added/ai-sre/chat-automation/{resolve,turn,execution-check}; those routes live in fc-event's own engine group and are not registered infc-pgy, so they are not public.fc-safariSettleRunRequest.statusgainedskipped; no registered public route uses that request.monit-webapiedge-push telemetry (PR docs(api): sync public RUM endpoints #162),fc-datasourceIM person-link sweep,fc-oncallDingTalk notify: no public request/response struct changed./incident/work-item/*split response examples lackassignees(consolidated has it);DutyError.reasonexists only in consolidated underx-flashduty-preserve-absence: true;ServiceUnavailableexists only in consolidated for on-call/rum/platform/safari and is referenced by no split operation; the Safari split'scomponents.responsesdiffer from the other five files in five entries (BadRequest,Forbiddenexample names/messages,TooManyRequestsdescription, andNotFound/ServiceUnavailableabsent).#1051(docs/app-key-leak-remediation) is still open and stale; not used as a source.mapping.yamldeclareson-call/calendarasproviders: [event]pointing at fc-event, while the eight/calendar/*rows are providerpgyand the handlers live in fc-pgy. Running analyze strictly by that mapping would silently drop those eight operations.Examples
/rum/issue/update,/rum/issue/infoand/rum/issue/listgained the new field only; their existing values are untouched. The Safari additions (run_in: "web",execution_place: "web_console",execution_location: {place, run_scope, team_id, description}) are constructed from the schema and the Go source, not captured from a live API: this environment has noapp_keycredential forhttps://api-dev.flashcat.cloud. They reuse the IDs already present in those examples so request and response stay coherent.